using System;
using System.Reflection;
using System.Runtime.InteropServices;
using Kitware.mummy.Runtime;

namespace Kitware.VTK;

/// <summary>
///    vtkLinearExtrusionFilter
/// </summary>
/// <remarks>
///    sweep polygonal data creating a "skirt" from free edges and lines, and lines from
/// vertices
///
/// vtkLinearExtrusionFilter is a modeling filter. It takes polygonal data as
/// input and generates polygonal data on output. The input dataset is swept
/// according to some extrusion function and creates new polygonal primitives.
/// These primitives form a "skirt" or swept surface. For example, sweeping a
/// line results in a quadrilateral, and sweeping a triangle creates a "wedge".
///
/// There are a number of control parameters for this filter. You can
/// control whether the sweep of a 2D object (i.e., polygon or triangle strip)
/// is capped with the generating geometry via the "Capping" ivar. Also, you
/// can extrude in the direction of a user specified vector, towards a point,
/// or in the direction of vertex normals (normals must be provided - use
/// vtkPolyDataNormals if necessary). The amount of extrusion is controlled by
/// the "ScaleFactor" instance variable.
///
/// The skirt is generated by locating certain topological features. Free
/// edges (edges of polygons or triangle strips only used by one polygon or
/// triangle strips) generate surfaces. This is true also of lines or
/// polylines. Vertices generate lines.
///
/// This filter can be used to create 3D fonts, 3D irregular bar charts,
/// or to model 2 1/2D objects like punched plates. It also can be used to
/// create solid objects from 2D polygonal meshes.
///
/// @warning
/// Some polygonal objects have no free edges (e.g., sphere). When swept,
/// this will result in two separate surfaces if capping is on, or no surface
/// if capping is off.
///
/// </remarks>
/// <seealso>
///
/// vtkRotationalExtrusionFilter
/// </seealso>
public class vtkLinearExtrusionFilter : vtkPolyDataAlgorithm
{
	/// <summary>
	/// Automatically generated type registration mechanics.
	/// </summary>
	public new const string MRFullTypeName = "Kitware.VTK.vtkLinearExtrusionFilter";

	/// <summary>
	/// Automatically generated type registration mechanics.
	/// </summary>
	public new static readonly string MRClassNameKey;

	/// <summary>
	/// Automatically generated type registration mechanics.
	/// </summary>
	static vtkLinearExtrusionFilter()
	{
		MRClassNameKey = "class vtkLinearExtrusionFilter";
		Methods.RegisterType(Assembly.GetExecutingAssembly(), MRClassNameKey, Type.GetType("Kitware.VTK.vtkLinearExtrusionFilter"));
	}

	/// <summary>
	/// Automatically generated constructor - called from generated code.
	/// DO NOT call directly.
	/// </summary>
	public vtkLinearExtrusionFilter(IntPtr rawCppThis, bool callDisposalMethod, bool strong)
		: base(rawCppThis, callDisposalMethod, strong)
	{
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern IntPtr vtkLinearExtrusionFilter_New(ref uint mteStatus, ref uint mteIndex, ref uint rawRefCount);

	/// <summary>
	/// Create object with normal extrusion type, capping on, scale factor=1.0,
	/// vector (0,0,1), and extrusion point (0,0,0).
	/// </summary>
	public new static vtkLinearExtrusionFilter New()
	{
		vtkLinearExtrusionFilter result = null;
		uint mteStatus = 0u;
		uint mteIndex = uint.MaxValue;
		uint rawRefCount = 0u;
		IntPtr intPtr = vtkLinearExtrusionFilter_New(ref mteStatus, ref mteIndex, ref rawRefCount);
		if (IntPtr.Zero != intPtr)
		{
			result = (vtkLinearExtrusionFilter)Methods.CreateWrappedObject(mteStatus, mteIndex, rawRefCount, intPtr, callDisposalMethod: true, out var _);
		}
		return result;
	}

	/// <summary>
	/// Create object with normal extrusion type, capping on, scale factor=1.0,
	/// vector (0,0,1), and extrusion point (0,0,0).
	/// </summary>
	public vtkLinearExtrusionFilter()
		: base(IntPtr.Zero, callDisposalMethod: false, strong: false)
	{
		uint mteStatus = 0u;
		uint mteIndex = uint.MaxValue;
		uint rawRefCount = 0u;
		IntPtr rawCppThis = vtkLinearExtrusionFilter_New(ref mteStatus, ref mteIndex, ref rawRefCount);
		SetCppThis(rawCppThis, callDisposalMethod: true, (mteStatus != 0 && rawRefCount >= 2) ? true : false);
	}

	/// <summary>
	/// Automatically generated protected Dispose method - called from
	/// public Dispose or the C# destructor. DO NOT call directly.
	/// </summary>
	protected override void Dispose(bool disposing)
	{
		base.Dispose(disposing);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkLinearExtrusionFilter_CappingOff_01(HandleRef pThis);

	/// <summary>
	/// Turn on/off the capping of the skirt.
	/// </summary>
	public virtual void CappingOff()
	{
		vtkLinearExtrusionFilter_CappingOff_01(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkLinearExtrusionFilter_CappingOn_02(HandleRef pThis);

	/// <summary>
	/// Turn on/off the capping of the skirt.
	/// </summary>
	public virtual void CappingOn()
	{
		vtkLinearExtrusionFilter_CappingOn_02(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern int vtkLinearExtrusionFilter_GetCapping_03(HandleRef pThis);

	/// <summary>
	/// Turn on/off the capping of the skirt.
	/// </summary>
	public virtual int GetCapping()
	{
		return vtkLinearExtrusionFilter_GetCapping_03(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern IntPtr vtkLinearExtrusionFilter_GetExtrusionPoint_04(HandleRef pThis);

	/// <summary>
	/// Set/Get extrusion point. Only needs to be set if PointExtrusion is
	/// turned on. This is the point towards which extrusion occurs.
	/// </summary>
	public virtual double[] GetExtrusionPoint()
	{
		IntPtr intPtr = vtkLinearExtrusionFilter_GetExtrusionPoint_04(GetCppThis());
		double[] array = null;
		if (IntPtr.Zero != intPtr)
		{
			array = new double[3];
			Marshal.Copy(intPtr, array, 0, array.Length);
		}
		return array;
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkLinearExtrusionFilter_GetExtrusionPoint_05(HandleRef pThis, IntPtr data);

	/// <summary>
	/// Set/Get extrusion point. Only needs to be set if PointExtrusion is
	/// turned on. This is the point towards which extrusion occurs.
	/// </summary>
	public virtual void GetExtrusionPoint(IntPtr data)
	{
		vtkLinearExtrusionFilter_GetExtrusionPoint_05(GetCppThis(), data);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern int vtkLinearExtrusionFilter_GetExtrusionType_06(HandleRef pThis);

	/// <summary>
	/// Set/Get the type of extrusion.
	/// </summary>
	public virtual int GetExtrusionType()
	{
		return vtkLinearExtrusionFilter_GetExtrusionType_06(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern int vtkLinearExtrusionFilter_GetExtrusionTypeMaxValue_07(HandleRef pThis);

	/// <summary>
	/// Set/Get the type of extrusion.
	/// </summary>
	public virtual int GetExtrusionTypeMaxValue()
	{
		return vtkLinearExtrusionFilter_GetExtrusionTypeMaxValue_07(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern int vtkLinearExtrusionFilter_GetExtrusionTypeMinValue_08(HandleRef pThis);

	/// <summary>
	/// Set/Get the type of extrusion.
	/// </summary>
	public virtual int GetExtrusionTypeMinValue()
	{
		return vtkLinearExtrusionFilter_GetExtrusionTypeMinValue_08(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern long vtkLinearExtrusionFilter_GetNumberOfGenerationsFromBase_09(HandleRef pThis, string type);

	/// <summary>
	///             Undocumented Block
	/// </summary>
	public override long GetNumberOfGenerationsFromBase(string type)
	{
		return vtkLinearExtrusionFilter_GetNumberOfGenerationsFromBase_09(GetCppThis(), type);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern long vtkLinearExtrusionFilter_GetNumberOfGenerationsFromBaseType_10(string type);

	/// <summary>
	///             Undocumented Block
	/// </summary>
	public new static long GetNumberOfGenerationsFromBaseType(string type)
	{
		return vtkLinearExtrusionFilter_GetNumberOfGenerationsFromBaseType_10(type);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern double vtkLinearExtrusionFilter_GetScaleFactor_11(HandleRef pThis);

	/// <summary>
	/// Set/Get extrusion scale factor,
	/// </summary>
	public virtual double GetScaleFactor()
	{
		return vtkLinearExtrusionFilter_GetScaleFactor_11(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern IntPtr vtkLinearExtrusionFilter_GetVector_12(HandleRef pThis);

	/// <summary>
	/// Set/Get extrusion vector. Only needs to be set if VectorExtrusion is
	/// turned on.
	/// </summary>
	public virtual double[] GetVector()
	{
		IntPtr intPtr = vtkLinearExtrusionFilter_GetVector_12(GetCppThis());
		double[] array = null;
		if (IntPtr.Zero != intPtr)
		{
			array = new double[3];
			Marshal.Copy(intPtr, array, 0, array.Length);
		}
		return array;
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkLinearExtrusionFilter_GetVector_13(HandleRef pThis, IntPtr data);

	/// <summary>
	/// Set/Get extrusion vector. Only needs to be set if VectorExtrusion is
	/// turned on.
	/// </summary>
	public virtual void GetVector(IntPtr data)
	{
		vtkLinearExtrusionFilter_GetVector_13(GetCppThis(), data);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern int vtkLinearExtrusionFilter_IsA_14(HandleRef pThis, string type);

	/// <summary>
	///             Undocumented Block
	/// </summary>
	public override int IsA(string type)
	{
		return vtkLinearExtrusionFilter_IsA_14(GetCppThis(), type);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern int vtkLinearExtrusionFilter_IsTypeOf_15(string type);

	/// <summary>
	///             Undocumented Block
	/// </summary>
	public new static int IsTypeOf(string type)
	{
		return vtkLinearExtrusionFilter_IsTypeOf_15(type);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern IntPtr vtkLinearExtrusionFilter_NewInstance_17(HandleRef pThis, ref uint mteStatus, ref uint mteIndex, ref uint rawRefCount);

	/// <summary>
	///             Undocumented Block
	/// </summary>
	public new vtkLinearExtrusionFilter NewInstance()
	{
		vtkLinearExtrusionFilter result = null;
		uint mteStatus = 0u;
		uint mteIndex = uint.MaxValue;
		uint rawRefCount = 0u;
		IntPtr intPtr = vtkLinearExtrusionFilter_NewInstance_17(GetCppThis(), ref mteStatus, ref mteIndex, ref rawRefCount);
		if (IntPtr.Zero != intPtr)
		{
			result = (vtkLinearExtrusionFilter)Methods.CreateWrappedObject(mteStatus, mteIndex, rawRefCount, intPtr, callDisposalMethod: true, out var _);
		}
		return result;
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern IntPtr vtkLinearExtrusionFilter_SafeDownCast_18(HandleRef o, ref uint mteStatus, ref uint mteIndex, ref uint rawRefCount);

	/// <summary>
	///             Undocumented Block
	/// </summary>
	public new static vtkLinearExtrusionFilter SafeDownCast(vtkObjectBase o)
	{
		vtkLinearExtrusionFilter vtkLinearExtrusionFilter2 = null;
		uint mteStatus = 0u;
		uint mteIndex = uint.MaxValue;
		uint rawRefCount = 0u;
		IntPtr intPtr = vtkLinearExtrusionFilter_SafeDownCast_18(o?.GetCppThis() ?? default(HandleRef), ref mteStatus, ref mteIndex, ref rawRefCount);
		if (IntPtr.Zero != intPtr)
		{
			vtkLinearExtrusionFilter2 = (vtkLinearExtrusionFilter)Methods.CreateWrappedObject(mteStatus, mteIndex, rawRefCount, intPtr, callDisposalMethod: true, out var found);
			if (found)
			{
				vtkLinearExtrusionFilter2.Register(null);
			}
		}
		return vtkLinearExtrusionFilter2;
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkLinearExtrusionFilter_SetCapping_19(HandleRef pThis, int _arg);

	/// <summary>
	/// Turn on/off the capping of the skirt.
	/// </summary>
	public virtual void SetCapping(int _arg)
	{
		vtkLinearExtrusionFilter_SetCapping_19(GetCppThis(), _arg);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkLinearExtrusionFilter_SetExtrusionPoint_20(HandleRef pThis, double _arg1, double _arg2, double _arg3);

	/// <summary>
	/// Set/Get extrusion point. Only needs to be set if PointExtrusion is
	/// turned on. This is the point towards which extrusion occurs.
	/// </summary>
	public virtual void SetExtrusionPoint(double _arg1, double _arg2, double _arg3)
	{
		vtkLinearExtrusionFilter_SetExtrusionPoint_20(GetCppThis(), _arg1, _arg2, _arg3);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkLinearExtrusionFilter_SetExtrusionPoint_21(HandleRef pThis, IntPtr _arg);

	/// <summary>
	/// Set/Get extrusion point. Only needs to be set if PointExtrusion is
	/// turned on. This is the point towards which extrusion occurs.
	/// </summary>
	public virtual void SetExtrusionPoint(IntPtr _arg)
	{
		vtkLinearExtrusionFilter_SetExtrusionPoint_21(GetCppThis(), _arg);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkLinearExtrusionFilter_SetExtrusionType_22(HandleRef pThis, int _arg);

	/// <summary>
	/// Set/Get the type of extrusion.
	/// </summary>
	public virtual void SetExtrusionType(int _arg)
	{
		vtkLinearExtrusionFilter_SetExtrusionType_22(GetCppThis(), _arg);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkLinearExtrusionFilter_SetExtrusionTypeToNormalExtrusion_23(HandleRef pThis);

	/// <summary>
	/// Set/Get the type of extrusion.
	/// </summary>
	public void SetExtrusionTypeToNormalExtrusion()
	{
		vtkLinearExtrusionFilter_SetExtrusionTypeToNormalExtrusion_23(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkLinearExtrusionFilter_SetExtrusionTypeToPointExtrusion_24(HandleRef pThis);

	/// <summary>
	/// Set/Get the type of extrusion.
	/// </summary>
	public void SetExtrusionTypeToPointExtrusion()
	{
		vtkLinearExtrusionFilter_SetExtrusionTypeToPointExtrusion_24(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkLinearExtrusionFilter_SetExtrusionTypeToVectorExtrusion_25(HandleRef pThis);

	/// <summary>
	/// Set/Get the type of extrusion.
	/// </summary>
	public void SetExtrusionTypeToVectorExtrusion()
	{
		vtkLinearExtrusionFilter_SetExtrusionTypeToVectorExtrusion_25(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkLinearExtrusionFilter_SetScaleFactor_26(HandleRef pThis, double _arg);

	/// <summary>
	/// Set/Get extrusion scale factor,
	/// </summary>
	public virtual void SetScaleFactor(double _arg)
	{
		vtkLinearExtrusionFilter_SetScaleFactor_26(GetCppThis(), _arg);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkLinearExtrusionFilter_SetVector_27(HandleRef pThis, double _arg1, double _arg2, double _arg3);

	/// <summary>
	/// Set/Get extrusion vector. Only needs to be set if VectorExtrusion is
	/// turned on.
	/// </summary>
	public virtual void SetVector(double _arg1, double _arg2, double _arg3)
	{
		vtkLinearExtrusionFilter_SetVector_27(GetCppThis(), _arg1, _arg2, _arg3);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkLinearExtrusionFilter_SetVector_28(HandleRef pThis, IntPtr _arg);

	/// <summary>
	/// Set/Get extrusion vector. Only needs to be set if VectorExtrusion is
	/// turned on.
	/// </summary>
	public virtual void SetVector(IntPtr _arg)
	{
		vtkLinearExtrusionFilter_SetVector_28(GetCppThis(), _arg);
	}
}
